package com.wgh.product.converter;

import com.wgh.product.dto.ProductDTO;
import com.wgh.product.entity.shop.Product;
import com.wgh.product.entity.shop.ProductAttribute;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * 商品对象转换器
 */
@Component
public class ProductConverter {
    
    /**
     * 将Product实体转换为ProductDTO
     * @param product 商品实体
     * @return 商品DTO
     */
    public ProductDTO toDTO(Product product) {
        if (product == null) {
            return null;
        }
        
        ProductDTO dto = new ProductDTO();
        dto.setId(product.getId());
        dto.setName(product.getName());
        dto.setDescription(product.getDescription());
        dto.setBrandId(product.getBrandId());
        dto.setCategoryId(product.getCategoryId());
        dto.setPrice(product.getSalePrice());
        dto.setStock(product.getTotalStock());
        dto.setStatus(product.getStatus());
        dto.setMainImage(product.getMainImage());
        dto.setImageUrls(product.getImages());
        dto.setSalesVolume(product.getSaleCount());
        dto.setAttributes(convertAttributesToString(product.getAttributes()));
        // 其他属性可以根据需要进行映射
        
        return dto;
    }
    
    /**
     * 将Product实体列表转换为ProductDTO列表
     * @param products 商品实体列表
     * @return 商品DTO列表
     */
    public List<ProductDTO> toDTOList(List<Product> products) {
        if (products == null || products.isEmpty()) {
            return new ArrayList<>();
        }
        
        List<ProductDTO> dtos = new ArrayList<>();
        for (Product product : products) {
            dtos.add(toDTO(product));
        }
        
        return dtos;
    }
    
    /**
     * 将ProductDTO转换为Product实体
     * @param dto 商品DTO
     * @return 商品实体
     */
    public Product toEntity(ProductDTO dto) {
        if (dto == null) {
            return null;
        }
        
        Product product = new Product();
        product.setId(dto.getId());
        product.setName(dto.getName());
        product.setDescription(dto.getDescription());
        product.setBrandId(dto.getBrandId());
        product.setCategoryId(dto.getCategoryId());
        product.setSalePrice(dto.getPrice());
        product.setTotalStock(dto.getStock());
        product.setStatus(dto.getStatus());
        product.setMainImage(dto.getMainImage());
        product.setImages(dto.getImageUrls());
        product.setSaleCount(dto.getSalesVolume());
        // 其他属性可以根据需要进行映射
        
        return product;
    }
    
    /**
     * 将List<ProductAttribute>转换为String
     * @param attributes 商品属性列表
     * @return 转换后的字符串
     */
    private String convertAttributesToString(List<ProductAttribute> attributes) {
        if (attributes == null || attributes.isEmpty()) {
            return "";
        }
        
        StringBuilder sb = new StringBuilder();
        for (ProductAttribute attribute : attributes) {
            sb.append(attribute.getName()).append(",");
        }
        
        // 移除最后一个逗号
        if (sb.length() > 0) {
            sb.deleteCharAt(sb.length() - 1);
        }
        
        return sb.toString();
    }
}